package com.tbit.uqbike.service.base;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * redis service
 *
 * @author Leon
 * 2017年2月24日 下午4:09:17
 */
public interface RedisService {
    /**
     * 添加
     *
     * @param key
     * @param value
     */
    void add(String key, String value);

    /**
     * 设置有效期
     *
     * @param key
     * @param value
     * @param seconds
     */
    void add(String key, String value, Integer seconds);

    /**
     * 获取
     *
     * @param key
     * @return
     */
    String get(String key);

    void del(String key);

    /**
     * 获取二级哈希
     *
     * @param hashId
     * @param key
     * @return
     */
    public String get(String hashId, String key);

    /**
     * 获取一级哈希
     *
     * @param hashId
     * @return
     */
    public Map<String, String> getAll(String hashId);

    /**
     * 自增
     */
    public void incr(String hashId);

    /**
     * 自增
     */
    public void incrByRegionId(String hashId);

    /**
     * 是否存在key
     */
    public Boolean hasKey(String hashId);

    /**
     * 设置有效期 (自定义时间类型)
     *
     * @param key
     * @param value
     * @param timeout
     * @param unit
     */
    void add(String key, String value, long timeout, TimeUnit unit);

    /**
     * 通过前缀删除key
     *
     * @param prex
     */
    @Deprecated
    void delByPrex(String prex);

    @Deprecated
    void delByPrefixPipeline(String prex);

    /**
     * 是否被锁
     *
     * @param key    键
     * @param second 被锁的秒数
     * @return true - 已加锁  false-未枷锁
     */
    boolean locked(String key, Integer second);

    /**
     * 获取列表
     * @param key
     * @return
     */
    List<String> getList(String key);

    /**
     * 从列表删除
     * @param key
     * @param value
     */
    void delToList(String key, String value);

    /**
     * 分布式锁
     *
     * @param key
     * @param liveTime
     * @return
     */
    boolean setNx(String key, String value, long liveTime);

    /**
     * redis set 结构添加元素
     * @param key
     * @param values
     */
    void addSet(String key, Date expireDate, String... values);

    /**
     * redis set 结构判断 set中是否存在value
     * @param key
     * @param value
     * @return
     */
    boolean hasElementSet(String key,String value);

    /**
     * 删除hash表中的值
     * @param key  键 不能为null
     * @param item 项 可以使多个 不能为null
     */
    void hdel(String key, Object... item);

    /**
     * 自增
     * @param key 自增key
     * @param liveTime 过期时间（单位：秒）
     * @return 自增后的值
     */
    Long incr(String key, long liveTime);

}
